//package aimis.config.db;
//
//import aimis.domain.Role;
//import aimis.repo.AuthorityRepo;
//import aimis.repo.RoleRepo;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.context.annotation.DependsOn;
//import org.springframework.context.annotation.Profile;
//
//@Profile(value = {"test", "dev", "local"})
//@Configuration
//public class RoleInitConfig {
//    private Logger LOGGER = LoggerFactory.getLogger(RoleInitConfig.class);
//    @Autowired
//    private AuthorityRepo authorityRepo;
//    @Autowired
//    private RoleRepo roleRepo;
//    @Bean
//    @DependsOn("departmentInit")
//    public void roleInit() {
//        LOGGER.info("初始化角色开始...");
//        thirdLineAnalysts();
//        secondLineAnalysts();
//        firstLineAnalysts();
//        interactionManager();
//        informationViewer();
//        LOGGER.info("初始化角色结束");
//    }
//
//
//    //三线分析师
//    private void thirdLineAnalysts() {
//        newRole("三线分析师");
//        setThirdLineAnalystsAuthority();
//    }
//
//    //TODO 事件任务执行记录、漏洞任务领取
//    public void setThirdLineAnalystsAuthority() {
//        try {
//            var authoritySet = authorityRepo.findByNameLike("告警事件/告警信息/查询");
//            authoritySet.addAll(authorityRepo.findByNameLike("告警事件/告警信息/人工提报"));
//            authoritySet.addAll(authorityRepo.findByNameLike("告警事件/告警信息/提报"));
//            authoritySet.addAll(authorityRepo.findByNameLike("告警事件/告警信息/详情"));
//            authoritySet.add(authorityRepo.findByName("告警事件/事件分析"));
//            authoritySet.addAll(authorityRepo.findByNameLike("告警事件/事件分析/"));
//            authoritySet.add(authorityRepo.findByName("告警事件/事件处置"));
//            authoritySet.addAll(authorityRepo.findByNameLike("告警事件/事件处置/"));
//            authoritySet.addAll(authorityRepo.findByNameLike("漏洞/漏洞信息/查询"));
//            authoritySet.addAll(authorityRepo.findByNameLike("漏洞/漏洞信息/查看详情"));
//            authoritySet.addAll(authorityRepo.findByNameLike("漏洞/漏洞验证"));
//            authoritySet.addAll(authorityRepo.findByNameLike("漏洞/漏洞处置"));
//            authoritySet.addAll(authorityRepo.findByNameLike("漏洞/漏洞复测"));
//            authoritySet.addAll(authorityRepo.findByNameLike("资产管理/资产组管理/添加"));
//            var role = roleRepo.findByName("三线分析师");
//            role.getAuthorities().addAll(authoritySet);
//            role = roleRepo.save(role);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    //二线分析师
//    private void secondLineAnalysts() {
//        newRole("二线分析师");
//        setSecondLineAnalystsAuthority();
//    }
//
//    public void setSecondLineAnalystsAuthority() {
//        try {
//            var role = roleRepo.findByName("三线分析师");
//            var authoritySet = role.getAuthorities();
//            authoritySet.addAll(authorityRepo.findByNameLike("告警事件/事件分析审核"));
//            authoritySet.addAll(authorityRepo.findByNameLike("告警事件/事件关闭"));
//            authoritySet.addAll(authorityRepo.findByNameLike("告警事件/事件处置审核"));
//            authoritySet.addAll(authorityRepo.findByNameLike("告警事件/事件判定"));
//            var role2 = roleRepo.findByName("二线分析师");
//            role2.getAuthorities().addAll(authoritySet);
//            role2 = roleRepo.save(role2);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    //一线分析师
//    private void firstLineAnalysts() {
//        newRole("一线分析师");
//        setFirstLineAnalystsAuthority();
//    }
//
//    public void setFirstLineAnalystsAuthority() {
//        try {
//            var role = roleRepo.findByName("二线分析师");
//            var authoritySet = role.getAuthorities();
//            authoritySet.addAll(authorityRepo.findByNameLike("运营脚本"));
//            var role2 = roleRepo.findByName("一线分析师");
//            role2.getAuthorities().addAll(authoritySet);
//            role2 = roleRepo.save(role2);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    //交互经理
//    private void interactionManager() {
//        newRole("交互经理");
//        setInteractionManagerAuthority();
//    }
//
//    //TODO 漏洞的关闭、报告的修改、报告的发布。
//    public void setInteractionManagerAuthority() {
//        try {
//            var role = roleRepo.findByName("一线分析师");
//            var authoritySet = role.getAuthorities();
//            authoritySet.addAll(authorityRepo.findByNameLike("漏洞/漏洞忽略"));
//            authoritySet.addAll(authorityRepo.findByNameLike("参数配置"));
//            authoritySet.addAll(authorityRepo.findByNameLike("告警事件/事件分析模板管理"));
//            var role2 = roleRepo.findByName("交互经理");
//            role2.getAuthorities().addAll(authoritySet);
//            role2 = roleRepo.save(role2);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    //信息查看用户
//    private void informationViewer() {
//        newRole("信息查看用户");
//        setInformationViewerAuthority();
//    }
//
//    private void setInformationViewerAuthority() {
//        try {
//            var authoritySet = authorityRepo.findByNameLike("查询");
//            authoritySet.addAll(authorityRepo.findByNameLike("查看"));
//            authoritySet.addAll(authorityRepo.findByNameLike("详情"));
//            authoritySet.addAll(authorityRepo.findByNameLike("绩效统计"));
//            var role = roleRepo.findByName("信息查看用户");
//            role.setAuthorities(authoritySet);
//            role = roleRepo.save(role);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    //再设置角色权限，每类角色的权限分别一个函数设置
//    private void newRole(String name) {
//        try {
//            var role = new Role();
//            role.setName(name);
//            role = roleRepo.save(role);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//}
